package com.teamwhole.modules.sys.service;

import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.teamwhole.common.utils.StringUtils;
import com.teamwhole.core.persistence.service.CrudService;
import com.teamwhole.modules.sys.dao.MenuDao;
import com.teamwhole.modules.sys.entity.Menu;
import com.teamwhole.modules.sys.utils.UserUtils;

@Service
public class MenuService extends CrudService<MenuDao, Menu>{
	
	@Transactional(readOnly = false)
    public void save(Menu menu) {
        // 保存或更新实体
        if (StringUtils.isBlank(menu.getId())) {
            menu.preInsert();
            this.dao.insert(menu);
        } else {
            menu.preUpdate();
            this.dao.update(menu);
        }
        // 清除用户菜单缓存
        UserUtils.removeCache(UserUtils.CACHE_MENU_LIST);
        // 清除权限缓存
        //systemRealm.clearAllCachedAuthorizationInfo();
        // 清除日志相关缓存
        //CacheUtils.remove(LogUtils.CACHE_MENU_NAME_PATH_MAP);
    }
	
	@Transactional(readOnly = false)
    public void delete(String id) {
		this.dao.delete(id);
		Menu menu = new Menu(id);
	    menu.getParamMap().put("parentId", menu.getId());
	    List<Menu> menus = this.dao.findList(menu);
	    delMenus(menus);
	    
        // 清除用户菜单缓存
        UserUtils.removeCache(UserUtils.CACHE_MENU_LIST);
        // 清除权限缓存
        //systemRealm.clearAllCachedAuthorizationInfo();
        // 清除日志相关缓存
        //CacheUtils.remove(LogUtils.CACHE_MENU_NAME_PATH_MAP);
    }
	
    public void delMenus(List<Menu> list) {
        for (Menu menu : list) {
        	this.dao.delete(menu);
            // 获取当前节点下的次级菜单[当前ID作为pid查询子节点]
            menu.getParamMap().put("pId", menu.getId());
            List<Menu> children = this.dao.findList(menu);
            delMenus(children);
        }
    }
	
}
